package com.qf.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qf.dto.AdminModuleRole;
import com.qf.dto.AdminRole;
import com.qf.mapper.AdminRoleMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@Service
public class AdminRoleService extends ServiceImpl<AdminRoleMapper , AdminRole> {

    @Resource
    private AdminModuleRoleService adminModuleRoleService;


    public void saveRole(AdminRole adminRole, String adminRoles) { // 需要传入的两个参数
        this.saveOrUpdate(adminRole);//对应所修改(授权)的角色
        //这个判断是为了判断进行新增操作的时候  是否会有id  有的话就删除这个角色所对应的中间表的admin_role_id
        if (adminRole.getId() != null){
            QueryWrapper<AdminModuleRole> wrapper = new QueryWrapper<>();
            wrapper.lambda().eq(AdminModuleRole::getAdminRoleId , adminRole.getId());
            adminModuleRoleService.remove(wrapper);//进行删除的操作

        }
        //当删除完成之后就进行批量的增加
        String[] adminRoleArray = adminRoles.split("|"); // 用来切割拼接的字符串
        ArrayList<AdminModuleRole> needInsert = new ArrayList<>(adminRoleArray.length);//获取切割完之后所对应的数组长度 并用ArrarList来接收
        for(String moduleId:adminRoleArray){
            //获取切割完成之后把属性放在数组里面   重新new一个中间表来接收  来完成批量增加的操作
            if (!"|".equals((moduleId))) { //当 | 不等于切割完成之后数组里面的属性的时候进行批量增加
                AdminModuleRole adminModuleRole = new AdminModuleRole();//新new一个中间表  用来新增权限
                adminModuleRole.setAdminRoleId(adminRole.getId());//添加角色所对应的权限id  (子id)
                adminModuleRole.setAdminModuleId(Long.parseLong(moduleId));//添加角色在权限表中具体对应的权限
                needInsert.add(adminModuleRole);//把新增完成之后设置进数组中
            }

        }
        adminModuleRoleService.saveBatch(needInsert, needInsert.size());//进行批量插入  把上面增加之后的数组进行批量插入
    }
}

